//当函数作为返回值时
// function create() {
//     const a = 100;
//     return function() {
//         console.log(a);
//     }
// }
// const fn = create();
// const a = 200;
// fn(); // 100

//当函数作为参数被传递时
function print(fn) {
    const a = 200;
    fn();
}
const a = 100;
function fn() {
    console.log(a);
}
print(fn); // 100

//闭包
// 闭包自由变量的查找是在函数定义的地方，向上级作用域查找，不是在执行的地方